分布式文件系统实现过程中需要解决哪些问题
分布式文件系统实现过程中需要解决以下问题:
全局命名空间问题:全局命名空间是指每一个文件和目录在文件系统中都有一个统一且唯一的名字,在所有的应用服务器上,用户都可以用相同的名字来访问该文件或者目录,而无须关心文件的实际存储位置和为其提供服务的元数据服务器的位置。当用户访问的文件从一个存储位置迁移到另一个新的位置以后,用户仍可以继续用原来的名字来访问此文件或者目录,而无须关心文件所在的存储位置。全局命名空间在只有一个元数据服务器的分布式文件系统中比较容易实现,因为所有的名字服务都是由一个服务器提供,它具有全局知识,可以了解和管理全局所有的数据,其中包括名字的组织、映射和查找。整个系统只有一个元数据服务器的分布式文件系统实现有HDFS、Lustre、CXFS等。虽然它们的系统中还有一个备份的元数据服务器,但是正常时却只有一个元数据服务器工作。当然这样的实现可能存在系统瓶颈,特别是元数据处理比较频繁的时候。所以HDFS、Lustre、CXFS都在研究如何实现多个元数据服务器协同工作。
缓存一致性问题:缓存一致性是指在各个应用服务器访问分布式文件系统时,它们所访问的文件和目录内容之间的一致性关系。按照 POSIX(Portable Operating System Interface,可移植操作系统接口,以下简称POSIX)语义的标准,在本地文件系统中,如果一个进程修改了某个文件或者目录的属性或者内容,其他进程可以在这之后马上察觉到这种改变。但是在分布式系统中,要实现严格的 POSIX 是非常困难的,同时也会导致性能急剧下降。因为用来同步文件属性和内容的开销不仅会消耗计算和网络资源,也会造成很大的延时,因此各种分布式文件系统都会或多或少地降低 POSIX 语义的严格性。GPFS 也没有保证文件的访问时间的POSIX语义。在AFS服务器会记录客户端的缓存行为及客户端缓存文件的属性和数据。
可用性问题:分布式文件系统一般都是由多个节点组成,需要集体协作才能对外提供服务。但是随着系统规模的逐渐扩大,系统中软、硬件的失效概率也会大大增加,比如磁盘损坏、节点失效、网络断开等。一般采用RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列,以下简称RAID)技术保证磁盘的有效工作,提供比较稳定的数据源。对于节点的失效,通常针对不同的节点类型有不同的处理方法。例如,对于元数据服务器,一般采用失效接替减少系统暂停服务的时间(如Lustre、Storage Tank等),采用日志技术进行文件系统的快速恢复(CXFS等);对于系统中的存储节点,一般采用数据复制技术(replica),或者类似RAID在各个存储服务器之间做数据冗余存储等;对于网络失效,一般采取把网络划分成多个部分,如GPFS、Storage Tank规定只有包含半数以上可用节点的部分才能继续工作,以避免造成数据不一致性。
可扩展性问题:应用对分布式文件系统在性能和容量方面的要求在不断增长。分布式文件系统一般都是通过扩充系统规模来取得更好的性能和更大的容量。但是对于各种系统结构,系统在规模上可能存在不同限制。比如,NFS或者CIFS采用单个服务器,那么整个系统的性能和容量都存在瓶颈,难以突破单个服务器系统的极限。设法保证系统的性能随着系统的规模能够线性增长,是分布式文件系统一直努力的目标。另外,扩展性还体现在系统规模的增长不会带来系统管理复杂度的过度增加。降低控制系统的管理成本,简化系统的管理流程,都是分布式文件系统实现的关键技术。Storage Tank、CXFS、GFS等将系统分为多个层次,每个层次实现不同的功能,以简化整个系统的设计和管理难度。其中一个很重要的技术方面就是存储空间的虚拟化(Virtualization)。虚拟化存储提供给文件系统的是一个共享的虚拟存储空间,屏蔽了存储实现的细节,同时具备了如容错、动态负载平衡等特点。分布式文件系统利用这些特性可以取得很好的扩展性。